With the increased availability of broadband Internet connections, the use of Voice over Internet Protocol (VoIP) to make telephone calls over the Internet has also increased. Currently, there are two widely deployed VoIP standards: H.323 and Session Initiation Protocol (SIP). H.323 is an International Telecommunication Union Telecommunication Standardization Sector (ITU-T) specification for transmitting audio, video, and data across an Internet Protocol (IP) network. The H.323 standard addresses call signaling and control, multimedia transport and control, and bandwidth control for point-to-point and multipoint conferences. SIP is an application-layer signaling-control protocol used to establish, maintain, and terminate multimedia sessions involving media such as audio, video, and data.
An endpoint is an entity from which media originates or terminates. This endpoint can be, e.g., an H.323 terminal or a SIP user agent. Each VoIP session between endpoints will include three sets of communication flows: signaling, media streams, and media control messages. In the signaling stage, the two endpoints use a signaling protocol to establish the connection between the endpoints by negotiating the codec and IP ports that will be used for the session's media streams and media control messages. Different codecs are used for different types of sessions, such as G.711 for “toll quality” voice communication, G.729 for lower quality voice communication, and T.38 for transmitting fax data over IP.
Unfortunately, the SIP and H.323 protocols are not inherently compatible. Therefore, in order for a SIP endpoint to connect with an H.323 endpoint, some sort of interworking function is utilized in order to achieve compatibility. This is commonly accomplished using an interworking server, such as a Session Border Controller (SBC), which provides a protocol translation function between the two heterogeneous endpoints. However, due to incompatibilities in the call setup procedures defined by each of the protocols, this conventional protocol translation fails to provide the same functionality that would be provided in the case of a call between homogeneous endpoints.